package lab6;

import static java.lang.Math.log;
import static java.lang.Math.abs;

/**
 * Created with IntelliJ IDEA.
 * User: Борис
 * Date: 29.11.13
 * Time: 11:33
 * To change this template use File | Settings | File Templates.
 */
public class LabFive {
    private double e;  // точность
    private double e1; // точность
    private double x;  // корень
    private int numOption;

    /*
    e - точность
    numOption - номер функции
    */
    public LabFive(double e, int numOption){
        this.e = e;
        this.e1 = e/10000;
        this.numOption = numOption;
    }
    /*
    a - левая граница отрезка
    b - правая граница отрезка
    */
    public double getX(){
        return x;
    }
    // нахождение корня уравнения методом деления отрезка пополам
    public void findRootOfTheEquation(double a,double b){
        double fa;     // значение функции в точке а
        double fc;     // значение функции в точке c
        double c = 0;  //середина отрезка
        fa = f(a);
        while(b-a >= e){
            c = (a + b)/2.0;
            fc = f(c);
            if (abs(fc) < e1) break;
            else if (fa*fc < 0)
                b = c;
            else {
                a = c;
                fa = fc;
            }
        }
        x = c;
    }
    // проверка решения
    public double checkDecision(){
        return f(x);
    }

    // x - аргумент numOption - номер функции
    private double f(double x){
        switch(numOption){
            case 1:
                return -2*log(x-1.5);
            case 2:
                return x*log(x+1)-5;
            default:
                throw new IllegalArgumentException("Incorrect number option");
        }
    }
}
